<?php
/**
 * 上传管理
 */

namespace app\admin\controller;

use think\Controller;
use Upyun\Config;
use Upyun\Signature;
use Upyun\Util;

class Upload extends Controller
{
    public function getToken()
    {
        $filename = input('filename');//获取文件名
        $config = new Config('', '', '');
        $config->setFormApiKey('=');


        $data['save-key'] = $this->getNewFileName($filename);
        $data['expiration'] = time() + 120;
        $data['bucket'] = BUCKET;
        $policy = Util::base64Json($data);
        $uri = '/' . $data['bucket'];
        $signature = Signature::getBodySignature($config, 'POST', $uri, null, $policy);
        echo json_encode(array(
            'policy' => $policy,
            'authorization' => $signature
        ));
    }

    /**
     * 生成新文件名
     * @param $fileName
     * @return string
     */
    public  function getNewFileName($fileName)
    {
        $fileType = pathinfo($fileName, PATHINFO_EXTENSION);//获取文件后缀
        $pid = getmypid();//进程id。在同一台机器下高并发时，极易得到相同的毫秒
        time_nanosleep(0, 1000);//延时1000纳秒=1毫秒。同一进行连续使用本函数时，可能得到相同的毫秒，于是需要这个延时来保证每次得到的毫秒未被使用。
        $timetick = microtime(TRUE) * 1000;//微秒
        $uuid = hash('ripemd160', $pid . '+' . $timetick . '+' . $fileName);
        return $uuid . '.' . $fileType;
    }
}